home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The X-Philes (2nd Revision)
/
The X-Philes Number 1 (1995).iso
/
xphiles
/
hp48_2
/
mpe_v1_0.dem
< prev
next >
Wrap
Internet Message Format
|
1995-03-23
|
12KB
From comp.sys.handhelds Fri May 24 22:32:05 1991
Path: seq!ecsgate!mcnc!taco!lll-winken!elroy.jpl.nasa.gov!swrinde!zaphod.mps.ohio-state.edu!wuarchive!udel!haven.umd.edu!decuac!pa.dec.com!nntpd.lkg.dec.com!ryn.mro4.dec.com!pinbot.enet.dec.com!ervin
From: ervin@pinbot.enet.dec.com (Joseph James Ervin)
Newsgroups: comp.sys.handhelds
Subject: HP48 MPE uuencoded DEMO
Message-ID: <4844@ryn.mro4.dec.com>
Date: 15 May 91 19:23:32 GMT
Sender: guest@ryn.mro4.dec.com
Reply-To: ervin@pinbot.enet.dec.com (Joseph James Ervin)
Organization: Digital Equipment Corporation
Lines: 211
The following is an excerpt from the MPE User's guide, describing how to
download and use the MPE demo application.
*********************************
4.1 Application Overview
This demo application is a simple demonstration of how MPE can be used
to do graphical animation of several objects on the screen at once.
This also provides a good visual demonstration of the CPU loading
effects described in earlier sections.
Basically, the application consists of a fire button and four
"bullets". This application uses the [+] button as the fire button.
When the user starts the application, the screen blanks and waits for
the user to press the fire button. For each press of the [+] button,
the application will fire a bullet. The bullets start at the upper
left of the screen and move down the screen, row by row, until they
reach the bottom of the screen. When any bullet reaches the lower
right of the screen, the application stops. When the user has fired
all four bullets, the fire button is disabled for the remainder of the
application. The [.] key quits the application. Refer to the
following section for how to download and run the application.
4.2 Downloading And Running The Application
Included in this distribution is the uuencoded binary file. This
binary file is a directory containing the machine language code which
makes up the MPE application, and a short RPL program which runs it.
The user should uudecode this file and then download the resulting
binary file in the usual manner to the HP48SX (make sure to set the
HP48SX kermit to binary mode. The RPL program, "DEMO", in the new
directory serves only to clear the display and set the display to PICT
memory before running the machine language application ("XXX"). You
should _not_ run the "XXX" program directly, since if PICT memory has
been purged (by doing a PICT PURGE), then the application may corrupt
memory. Once started by pressing the button labeled "DEMO", the
machine language program can be aborted at any time by pressing the
[.] button.
4.3 Process Descriptions
The following sections describe each of the seven processes which make
up the application. Note that processes #1 and #2 are not integral to
the application and could be omitted.
4.3.1 Process #1
This is the process which is auto-executed by MPE at startup. In
terms of the application, the only thing that this process does is to
start up the keyboard scanner process (#7). Another function that
this process performs, in conjunction with process #2 is to do a
register context integrity test periodically while the application is
running. This was written mainly for debugging MPE, but may be useful
to the programmer in general, so I have left it in. It runs once per
second, so it does not add significant overhead to the application.
4.3.2 Process #2
This process does nothing except clear all the processor registers.
The purpose of this process is to work with process #1 to implement a
register context integrity test.
4.3.3 Processes #3, #4, And #5.
These processes are grouped together here because they share the same
process definition. This process definition shows a good example of
how to share code between two or more processes. The code for this
process definition makes use of the IF_PROC/ENDIF_PROC macros to do
conditional execution of certain sections of code based on the current
context ID. For example, the three bullets owned by processes #3, #4,
and #5 all move at different speeds on the screen. This was done here
to visually show the independence of the bullet processes running in
the system. The process definition uses the IF_PROC/ENDIF_PROC macros
to schedule the correct process at the correct interval, thus
determining the speed of each bullet.
One thing to note is that this process definition does not attempt to
control the speed of a bullet with great accuracy. In other words, as
the four bullets are fired and the CPU becomes more heavily loaded,
the speed of the bullets corresponding to processes #3, #4, and #5
will slow down slightly. This is due to process latency in the
scheduler. Process #6 shows a similar bullet process, but one which
keeps track of absolute time and maintains an accurate velocity on the
screen, independent of CPU loading.
4.3.4 Process #6
This process definition is very similar to that which defines
processes #3, #4,and #5. The main difference is that process #6 keeps
track of absolute time, making sure that its bullet moves at exactly
the velocity indicated in the process definition. In this way, even
though the bullet for this process does not start until the CPU is
already very busy with the other three bullets, it will maintain its
velocity at the expense of the other three bullets.
The effects of the use of absolute time in this process, versus
relative time in the other three bullet processes, can be seen in two
ways. The first way is that after firing the four bullets, it should
be discernible that the fourth bullet (process #6) moves slightly
faster than the second one (process #4). By examining the definitions
of these processes, one quickly sees that processes #4 and #6 have the
same rescheduling interval. The difference in speed is therefore
attributable to the time that process #4 loses while sitting in the
RUN_LIST waiting to be run by the scheduler. Since process #6 keeps
track of absolute time internal to itself, this queuing time is
accurately recovered each time the process is invoked.
The second way that the use of absolute time in process #6 can be seen
is by pressing and briefly holding the [ON] key. Pressing this key
temporarily halts execution of the calculator, causing all processes
to pause. When the key is released, however, the bullet of process #6
will quickly "zip" ahead to catch up to where it should be. A similar
effect can also be seen by pressing and holding some other key
(besides [ON]). Since the keyboard controller causes lots of
interrupts in when this is done, it has the effect of heavily loading
the CPU. What can be seen on the display is that while the user holds
down a key and thereby loads the CPU, the three bullets which do not
use absolute timing slow down noticably, while the bullet for process
#6 maintains its correct average velocity. The manner in which
process #6 "catches up" to where it should be can be seen in the
bullet's jumpiness.
4.3.5 Process #7
This process comprises the keyboard scanner. This process simply
checks the keybuffer for the [+] key, and if it finds it then the next
bullet process is scheduled for execution. If the [.] key is pressed,
this process will cause the application to exit and continue with the
RPL thread. This process runs approximately 8 times per second.
*******************************************************************************
Here's the uuencoded demo application.
****************************CUT HERE*****************************************
begin 750 mpe.
M2%!(4#0X+466*O!_8Q, #6EI: \PM4#0!ME/I&!>S--0! D
M#-DKG;U-&1>S--0! <#"!H7LS34 0 "$!P7LS34 0 $B!D7LS34 0 %R!D7
MLS34 0 &4AD7LS34 0 "!D7LS34 0
M !-&1>S--0! D #-FKF+T& ?8
M"P <@* #VFA:S--0! 4#BVA4-=TME;$;ZJJJJJJJJJJJNJ
MJJJJJJJJK*K:JJJNJJJJJJJJJJ^JJJJJJJJJL*JJJJJJJJJQJJJJJJJJJK*J
MJJJJJJJJ5MH;7KX
M VMJ+<[X %41!P
M 0!%7%7$ OAD'
M 7MO;@+X! %\1!P 0!'W%7$
MOAD' XMO;@+X! %41!P
M0!%7%7$ OAD'
M9MS;@+X" %T1!P 0!'7%7%2&1>S--0! OAD'
M ZMPKH;X& 8 Z@0'
M & ;MW[
MLKY,V@NMO53;B[V]7-P+SKUDW8O>O?B;9X"Q%'O"_S'&$F,82T.:^\\21!A+
M0\T"P!)&082Q%%O'_S'&$F,82T/H^\\21!A+0\X&P!)&082Q%#O,_S'&$F,8
M2T,V_,\21!A+0X0(P!)&082Q%!O1_S'&$F,82T.$_,\21!A+0YD(P!)&082Q
M%/O5_S'&$F,82T/2_,\21!A+0V,(P!)&082Q%-O:_S'&$F,82T,@_<\21!A+
M0RT(P!)&082Q%+O?_S'&$F,82T-N_<\21!A+0P$*P!)&082Q%)OD_S'&$F,8
M2T.\_<\21!A+0SD+P!)&082Q%-OA_S'&$F,82T-D^L\21&&$L314K?\L011&
M&$M#1OO/$D1AA+$T=+O_+$$41AA+0RC\SQ)$882Q-)3)_RQ!%$882T,*_<\2
M1&&$L32TU_\L011&0PH @+$4>XG_,<828_H0A&$1]NRH+H^Q%/N&_S'&$F/Z
M$(170P@H$7 [@H 2"FJL;NJG#P& L30T@_\L,8>Q%!N!_S'&$F/7/E%T^J4/
M09O&"K<!!O]Q$747'/F9= 1@V1\7<8^A%K!&&&H ZINN(K<Y^J4.&&H &$M#
MKO?/$G,P&&H0&$NQA/<?8RPQII]1=/H0E'?YYPL82[%L]Q]C+#&&H181A$<
MOZHF[ZRL;&@K$4^\#_,<828S'"&B-!%D-!$D9!!A8#47;Z%?91=OH7]D$6
M1C$79#$71E%R 1#V47(!$?91<@$2]E%R 1/V47(!%&-P$.<I^J)N^LK&QA(C
M[6#M&$NQ:/L?8RPQ%B.L,1!D,11D,:1/47!AK_]1=/H?]G!!%$8Q%T0Q%T81
M$ 47]A$1!1?V$1(%%_81$P47]A$4!1=C$!AJ(&EH$; 3!^EJ8 =@@8 O?09#
M8@" H0^(?U,&^)MG@+$4NUS_,<828_H2Y &(+WT&^#=E@+]Y!OJ H1:"H0^
M+WT&^#=E@+]Y!MA#4: O$PIJKG_Z$ 82T->]<\2<T&;AFYWUAAJ 6F\CH!"
M8P" H0^ +WT&^#=E@+]Y!AA+L1#U'V,L,:8O01Z ^-)G@']3!OB;9X ]% 48
M:B%!&1<1&U4'@;$4.TS_,<828_H0A.?5LQAK$46T;_,<828_H4!1?V^J^O
M^A\%%_9!%$8Q%T0Q%V,P&$NQ)/0?8RPQIJ]1=OH5]E%V^A?V019&,1=D,1=C
M^@9S=X_O, $'^Q 82T,,],\28T$:8Q 82T/D\\\28T$:8Q"JJJJJJJJJJAA+
ML8#U'V,L,19&&$M#>P# $D082[&6\Q]C+#$698> $@>'UQA+L:3_'V,L,18E
MIX][I&_ZMV<QM&<QM6<!N&<!N6<!NF<!NV<!C+$T=/7_+#$6)1=C^I8'$ @H
M! MA![EC<0""@4 !6#WNT1S&&*A (*"0 )8->Q1C,8<J$ @H- U@LQ
MMT<1B"H0""A$ 6"GL4D:@"@8!"!0!@B+!'$8HJ$ @H9 ]@9[%+&H H&
M0@< 8%:P1Q&,*A (*(0 -8#I[@82[$H\A]C+#$69:</""CT_P%Z@H 2 J>_
M)M08^@#XTF> ?U,&^)MG@#T4!?H0 S&AC_JF?P$0$ $2, %T#8NQ%+L:_S'&
M$F-1=@@H$7"-:]6,L31D" L8&?7^J)N^LK&QH*Q%)MD_S'&$F,QPAHC019#
M80071+%E!1=D&/B2&/B2?0@HY(< +!CZH/J@C@@H\+TQ%(6P4;TQIPX),+-!
M"4"U00E AH ""(R B<0E>$W\:!>A@6][.H0<U$),8> @^,@ (@$)5A+X"
M @Z,@ (A$)5A%X" @R,@ (C$)6!H1^*>PG80U%PL8FQ%/L$_S'&$F-1=@$8
M8QA+L4+P'V,L,1:D,38QD&83^H" 0A\!8&\08QA+L0SP'V,L,1:D,39!D&83
M^H" 0I\ 8#D08QA+L=;O'V,L,1:D,391D&83^H" 0M\ 8 ,0@7H2@*>X$7B#
M:<N*L10[/?\QQA)C882Q-+0& "Q!%%M6<$&&@2^)@2_9AX!"?@C @J$/J@\!
M@+$46_+^,<828U%V :@/ZHB M\;0U$(&]4;<^J0 #,;E !4&Y0 9 @H@, (
M*' "41E^$P_J95C0RZX.,1>5$',(*/# ""@ E$9]@((*.# ""@0 E$9=@$(
M*,# ""@P E$9&/JAN)> /10%^H" 0I\ $(%Z&@!WHA&0KQWHB/<1J \(*&%P
M&6AA:1J/L12;+O\QQA)C882Q-*0! "Q!-"&@7A,&ZG>P0 SH+O<&!Q,Q:<(Q
M\9(F#.@2]T8%V$-1L%;JA*$&H+[I^J#6Z.KVQ@+HX/882[%^[1]C+#&&H180
M98?^=8^Q%+O5_C'&$F-1=OJ @"+_HR<(*'& WG)O=1B[3G!10H$0990D(@C]
M2Q9%%&,(B9 ",=00I" -,%030$!4U/1$T-D"'C;R)1YT*N"D A4
@ #@I (5 L!(#\.*!Y (#6EI:.3:R$@-T
end